﻿-----------------------------------------------------------------------------------------------
-----------------------------------pca.empresas------------------------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca.fn_add_empresa(varchar,--empresa_id $1
					      varchar,--codigo $2
					      varchar,--nombre $3
					      varchar,--nombre_comercial $4
					      varchar --direccion $5
					      )RETURNS void AS
$$
BEGIN
	INSERT INTO pca.empresas
		(empresa_id,
		codigo,
		nombre,
		nombre_comercial,
		direccion)
	VALUES
		($1,$2,$3,$4,$5);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_update_empresa(varchar,--empresa_id $1
						 varchar,--codigo $2
						 varchar,--nombre $3
						 varchar,--nombre_comercial $4
						 varchar,--direccion $5
						 boolean --activo $6
						 )RETURNS void AS
$$
BEGIN
	UPDATE pca.empresas SET
		codigo = $2,
		nombre = $3,
		nombre_comercial = $4,
		direccion = $5,
		activo = $6
	WHERE
		empresa_id=$1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_del_empresa(varchar --empresa_id $1
					      )RETURNS void AS
$$
BEGIN
	UPDATE pca.empresas SET
		eliminado = true
	WHERE
		empresa_id=$1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_empresa(varchar--empresa_id $1
					      )RETURNS SETOF pca.empresas AS
$$
DECLARE
	_row pca.empresas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca.empresas
		WHERE
			empresa_id = $1 AND
			eliminado = false
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_empresas()RETURNS SETOF pca.empresas AS
$$
DECLARE
	_row pca.empresas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca.empresas
		WHERE
			eliminado = false
		ORDER BY
			fecha_registro ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_empresas(integer,--start $1
						    integer --limit $2
						    )RETURNS SETOF refcursor AS
$$
DECLARE
	cursor_result refcursor;
	cursor_totalrows refcursor;
BEGIN
	OPEN cursor_result FOR
		SELECT
			*
		FROM
			pca.empresas
		WHERE
			eliminado = false
		ORDER BY
			fecha_registro ASC LIMIT $2 OFFSET $1;
	RETURN NEXT cursor_result;

	OPEN cursor_totalrows FOR
		SELECT
			count(empresa_id)
		FROM
			pca.empresas
		WHERE
			eliminado = false;
	RETURN NEXT cursor_totalrows;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_empresas(integer,--start $1
						    integer,--limit $2
						    varchar --query $3
						    )RETURNS SETOF refcursor AS
$$
DECLARE
	cursor_result refcursor;
	cursor_totalrows refcursor;
BEGIN
	OPEN cursor_result FOR
		SELECT
			*
		FROM
			pca.empresas
		WHERE
			eliminado = false AND
			(lower(pca_global.fn_ascii(nombre)) LIKE '%'|| lower(pca_global.fn_ascii($3)) ||'%' OR
			lower(pca_global.fn_ascii(direccion)) LIKE '%'|| lower(pca_global.fn_ascii($3)) ||'%')
		ORDER BY
			fecha_registro ASC LIMIT $2 OFFSET $1;
	RETURN NEXT cursor_result;

	OPEN cursor_totalrows FOR
		SELECT
			count(empresa_id)
		FROM
			pca.empresas
		WHERE
			eliminado = false AND
			(lower(pca_global.fn_ascii(nombre)) LIKE '%'|| lower(pca_global.fn_ascii($3)) ||'%' OR
			lower(pca_global.fn_ascii(direccion)) LIKE '%'|| lower(pca_global.fn_ascii($3)) ||'%');
	RETURN NEXT cursor_totalrows;
END;
$$
LANGUAGE plpgsql;
